package xyz.cerberu.cet.global.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author β世界
 * Created on 8:48
 * @Description 字符串工具类
 */
public class StringUtils extends org.apache.commons.lang3.StringUtils {

    /** 邮箱的正则表达式 **/
    private final static String EMAIL_FORMAT = "\\w[-\\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\\.)+[A-Za-z]{2,14}";
    /** 时间格式化的正则(yyyy-MM-dd) **/
    private final static String DATE_FORMAT = "\\d{4}(\\-|\\/|.)\\d{1,2}\\1\\d{1,2}";
    /** 特殊字符正则 **/
    private final static String SPECIAL_FORMAT = "[`~!@#$%^&*()+=|{}':;'\\[\\]<>/?~！@#￥%……&*——+|{}【】‘；：”“’。，、？]";
    /** emjoy正则 **/
    private final static Pattern EMJOY_PATTERN= Pattern.compile("[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]");
    /** URL字符匹配 **/
    private final static Pattern URL_PATTERN = Pattern.compile("(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]");
    /**  **/
    /**
     * @author β世界 on 8:49 2020/7/14
     * 用来验证字符串是否为邮箱
     * @return boolean
     **/
    public static boolean isEmail(String email){
        return email.matches(EMAIL_FORMAT);
    }

    /**
     * @author β世界 on 15:16 2020/10/24
     * 检查时间格式
     * @param date: 时间参数
     * @return boolean
     **/
    public static boolean dateFormat(String date){
        return date.matches(DATE_FORMAT);
    }

    public static String encodeEnjoy(String str){
        Matcher m=EMJOY_PATTERN.matcher(str);
        while(m.find()){
            System.out.println(m.group());
        }
        return str;
    }

    /**
     * @author β世界 on 11:07 2020/9/22
     * 让字符串中的URL地址高亮
     * @param str: 字符串
     * @return java.lang.String
     **/
    public static String highLightURL(String str){
        StringBuilder tempStr = new StringBuilder(str);
        Matcher m = URL_PATTERN.matcher(str);
        while (m.find()){
            tempStr.replace(tempStr.indexOf(m.group()),tempStr.indexOf(m.group())+m.group().length(),"<a href=\""+m.group()+"\">"+m.group()+"</a>");
        }
        return tempStr.toString();
    }

    /**
     * @author β世界 on 15:31 2021/2/16
     * 检测输入是否合法，是否包含以下字符
     * '/'、'<'、';'、'('、')'
     * @param str: 输入的字符
     * @return boolean
     **/
    public static boolean legal(String str){
        Pattern p = Pattern.compile(SPECIAL_FORMAT);
        Matcher m = p.matcher(str);
        return m.find();
    }



}
